package com.example.redislearning.service;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 积分抽奖服务接口
 * 基于Redis实现抽奖活动管理、用户参与、中奖记录等功能
 */
public interface LotteryService {

    /**
     * 创建抽奖活动
     * 
     * @param activityId 活动ID
     * @param activityName 活动名称
     * @param description 活动描述
     * @param totalPrize 总奖品数量
     * @param dailyPrize 每日奖品数量
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param prizePool 奖品池配置
     * @return 是否创建成功
     */
    boolean createLotteryActivity(String activityId, String activityName, String description,
                                int totalPrize, int dailyPrize, LocalDateTime startTime,
                                LocalDateTime endTime, Map<String, Integer> prizePool);

    /**
     * 用户参与抽奖
     * 
     * @param userId 用户ID
     * @param activityId 活动ID
     * @return 抽奖结果，包含中奖信息和状态
     */
    Map<String, Object> participateLottery(Integer userId, String activityId);

    /**
     * 获取抽奖活动详情
     * 
     * @param activityId 活动ID
     * @return 活动详情信息
     */
    Map<String, Object> getLotteryActivity(String activityId);

    /**
     * 获取中奖用户列表
     * 
     * @param activityId 活动ID
     * @param page 页码
     * @param size 每页数量
     * @return 中奖用户列表
     */
    List<Map<String, Object>> getWinners(String activityId, int page, int size);

    /**
     * 获取活动参与用户数量
     * 
     * @param activityId 活动ID
     * @return 参与用户数量
     */
    Integer getParticipantCount(String activityId);

    /**
     * 获取用户参与状态
     * 
     * @param userId 用户ID
     * @param activityId 活动ID
     * @return 用户参与状态信息
     */
    Map<String, Object> getUserParticipationStatus(Integer userId, String activityId);

    /**
     * 获取用户抽奖历史
     * 
     * @param userId 用户ID
     * @param page 页码
     * @param size 每页数量
     * @return 用户抽奖历史记录
     */
    List<Map<String, Object>> getUserLotteryHistory(Integer userId, int page, int size);

    /**
     * 结束抽奖活动
     * 
     * @param activityId 活动ID
     * @return 是否结束成功
     */
    boolean endLotteryActivity(String activityId);

    /**
     * 分页获取所有活动列表
     * 
     * @return 所有活动列表
     */
    List<Map<String, Object>> getLotteryActivities(int page, int size);

    /**
     * 获取所有活动列表
     *
     * @return 所有活动列表
     */
    List<Map<String, Object>> getAllActivities();
}